module NavigationHelpers
  def path_to(page_name)
    case page_name


    when /p[aá]gina (?:inicial|principal)/
      root_path

    when /p[aá]gina de listagem de funcion[áa]rios/
      funcionarios_path

    when /p[aá]gina de cadastro de funcion[áa]rio/
      new_funcionario_path

    when /p[aá]gina de exibi[cç][aã]o do funcion[áa]rio com login "([^"]*)"$/
      funcionario = Funcionario.find_by_login($1)
      funcionario_path(funcionario.id)

    when /p[aá]gina de exibi[cç][aã]o do funcion[áa]rio de nome "([^"]*)"$/
      dado_pessoal = DadoPessoal.find_by_nome($1)
      funcionario = Funcionario.find(dado_pessoal)
      funcionario_path(funcionario.id)

    when /p[aá]gina de edição do funcion[aá]rio com login "([^"]*)"$/
      funcionario = Funcionario.find_by_login($1)
      edit_funcionario_path(funcionario.id)

    when /p[aá]gina de edição do funcion[aá]rio de nome "([^"]*)"$/
      dado_pessoal = DadoPessoal.find_by_nome($1)
      funcionario = Funcionario.find(dado_pessoal)
      edit_funcionario_path(funcionario.id)

    when /p[aá]gina de exibição do funcion[aá]rio de cpf "([^"]*)"$/
      dado_pessoal = DadoPessoal.find_by_cpf($1)
      funcionario = Funcionario.find(dado_pessoal)
      funcionario_path(funcionario.id)

    when /p[aá]gina de exibiç[aã]o do funcion[áa]rio de email "([^"]*)"$/
      dado_pessoal = DadoPessoal.find_by_email($1)
      funcionario = Funcionario.find(dado_pessoal)
      funcionario_path(funcionario.id)

    when /p[aá]gina de exibiç[aã]o do funcion[aá]rio de horas semanais (\d+)$/
      dado_pessoal = DadoPessoal.find_by_horas_semanais($1)
      funcionario = Funcionario.find(dado_pessoal)
      funcionario_path(funcionario.id)

    when /p[aá]gina de cadastro em projeto$/
      new_funcionario_projeto_path

    when /p[aá]gina de menu de funcion[aá]rios/
      menu_funcionario_path

    when /p[aá]gina de cadastro de funcion[aá]rios/
      new_funcionario_path

      # When everything else fails
    else
      begin
        page_name =~ /p[aá]gina d(a|e|o) (.*)/
        path_components = $1.split(/\s+/)
        self.send(path_components.push('path').join('_').to_sym)
      rescue Object => e
        raise "Não existe nenhum path para a página \"#{page_name}\".\n" +
          "Adicione o path no #{__FILE__}"
      end
    end
  end
end

World(NavigationHelpers)
